{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "de01baa9",
   "metadata": {},
   "outputs": [],
   "source": [
    "import tensorflow as tf\n",
    "from scikeras.wrappers import KerasClassifier\n",
    "from sklearn.model_selection import KFold\n",
    "import numpy as np"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "88e441a2",
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas\n",
    "from sklearn.preprocessing import LabelEncoder\n",
    "from keras.utils import np_utils\n",
    "# Oversample and plot imbalanced dataset with SMOTE\n",
    "from collections import Counter\n",
    "from imblearn.over_sampling import SMOTE"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "2adbe533",
   "metadata": {},
   "source": [
    "### filename description\n",
    "1. The filename of the training data is named as lhs_k_sizenlhs.csv, where k in [1,10] is the number of random latin-hybercubic sampling index and nls in [5000:5000:50000] is the sampling density of grid. \n",
    "2. The filename of saved training is \"savemodel/lhs_k_sizenlhs.h5\"  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "75de3f09",
   "metadata": {},
   "outputs": [],
   "source": [
    "def getdata(k,nlhs):\n",
    "    filename = \"data/lhs_\"+str(k)+\"_size\"+str(nlhs)+\".csv\"\n",
    "    dataframe = pandas.read_csv(filename, header=None)\n",
    "    dataset = dataframe.values\n",
    "    X = dataset[:,0:6].astype(float)\n",
    "    Y = dataset[:,6]\n",
    "    counter = Counter(Y)\n",
    "    print(counter)\n",
    "    oversample = SMOTE(k_neighbors=3)\n",
    "    X, Y = oversample.fit_resample(X, Y)\n",
    "    counter = Counter(Y)\n",
    "    print(counter)\n",
    "    # encode class values as integers\n",
    "    encoder = LabelEncoder()\n",
    "    encoder.fit(Y)\n",
    "    encoded_Y = encoder.transform(Y)\n",
    "    # convert integers to dummy variables (i.e. one hot encoded)\n",
    "    dummy_y = np_utils.to_categorical(encoded_Y)\n",
    "    return X, dummy_y\n",
    "\n",
    "def savemodel(estimator, k, nlhs):\n",
    "    # Save weights only (existing functionality)\n",
    "    weights_filename = \"savemodel/lhs_\"+str(k)+\"_size\"+str(nlhs)+\"_noembed.h5\"\n",
    "    estimator.model_.save_weights(weights_filename)\n",
    "    \n",
    "    # Save complete model\n",
    "    full_model_filename = \"savemodel/lhs_\"+str(k)+\"_size\"+str(nlhs)+\"_noembed_full.h5\"\n",
    "    estimator.model_.save(full_model_filename)\n",
    "    \n",
    "    print(f\"Weights saved to: {weights_filename}\")\n",
    "    print(f\"Full model saved to: {full_model_filename}\")\n",
    "    pass\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "9c349faf",
   "metadata": {},
   "source": [
    "### grid description"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "b434455d",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[50000]\n",
      "[ 1  2  3  4  5  6  7  8  9 10]\n"
     ]
    }
   ],
   "source": [
    "nlhs_grid = [50000]\n",
    "k_grid = np.linspace(1,10,10,dtype=int)\n",
    "print(nlhs_grid)\n",
    "print(k_grid)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "ca754433",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAwgAAAKqCAYAAACepnlGAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/P9b71AAAACXBIWXMAAA9hAAAPYQGoP6dpAACdh0lEQVR4nOzdeVxU1f/H8feAMCAICMiugJrikljuW1puabZaalou2W6ZaZt9K7X6RYtfv1rf9sXtq7lkpqVpipqaqLjnWrlrioAKgmzC/P5Ar4yCis0AA6/n4zE+nDvn3jn3c8/c4cznnHtNFovFIgAAAACQ5FTaFQAAAABQdtBBAAAAAGCggwAAAADAQAcBAAAAgIEOAgAAAAADHQQAAAAABjoIAAAAAAx0EAAAAAAY6CAAAAAAMNBBAPCPTZo0SSaTSQcOHLDZNg8cOCCTyaRJkybZbJuOrkOHDurQoUNpVwMAUM7RQQDKqL179+qJJ55QzZo15ebmJi8vL7Vp00YTJkxQRkZGaVfPZqZPn67x48eXdjWsDBw4UCaTSV5eXoXG+s8//5TJZJLJZNLYsWOLvf2///5bo0eP1pYtW2xQ2+tnMpn0zDPPFPrahU7fhg0b7Pb+ZSUOAABrlUq7AgAut2DBAj3wwAMym83q37+/GjZsqOzsbK1evVovvviiduzYoS+++KK0q2kT06dP1/bt2zVs2DCr5eHh4crIyJCLi0up1KtSpUo6e/asfvzxR/Xq1cvqtWnTpsnNzU2ZmZnXte2///5bY8aMUUREhBo3bnzN6/3yyy/X9X5l1fXGAQBgX3QQgDJm//796tOnj8LDw7Vs2TIFBwcbrw0ZMkR//fWXFixY8I/fx2KxKDMzU+7u7pe9lpmZKVdXVzk5lV6S0WQyyc3NrdTe32w2q02bNvr2228v6yBMnz5dd9xxh+bMmVMidTl79qwqV64sV1fXEnk/AEDFxhAjoIx5//33lZaWpq+//tqqc3BB7dq19dxzzxnPz507p7feeku1atWS2WxWRESEXn31VWVlZVmtFxERoR49emjx4sVq2rSp3N3d9fnnn2vFihUymUyaMWOGXnvtNYWGhqpy5cpKTU2VJK1bt0633367vL29VblyZbVv316//fbbVfdj3rx5uuOOOxQSEiKz2axatWrprbfeUm5urlGmQ4cOWrBggQ4ePGgM2YmIiJBU9ByEZcuWqV27dvLw8JCPj4/uvvtu7dq1y6rM6NGjZTKZ9Ndff2ngwIHy8fGRt7e3Bg0apLNnz1617hf07dtXP//8s06fPm0si4+P159//qm+ffteVv7kyZN64YUXdOONN8rT01NeXl7q1q2btm7dapRZsWKFmjVrJkkaNGiQsd8X9rNDhw5q2LChNm7cqFtuuUWVK1fWq6++arxWcA7CgAED5Obmdtn+d+3aVVWrVtXff/99zft6rXbv3q37779fvr6+cnNzU9OmTTV//ny7xWHbtm1q3769KleurNq1a+u7776TJP36669q0aKF3N3dVbduXS1dutSqDgcPHtTTTz+tunXryt3dXX5+fnrggQcumydzYSjVypUr9cQTT8jPz09eXl7q37+/Tp06ZePoAYBjIIMAlDE//vijatasqdatW19T+UcffVSTJ0/W/fffrxEjRmjdunWKiYnRrl27NHfuXKuye/bs0YMPPqgnnnhCjz32mOrWrWu89tZbb8nV1VUvvPCCsrKy5OrqqmXLlqlbt25q0qSJRo0aJScnJ02cOFG33XabVq1apebNmxdZr0mTJsnT01PDhw+Xp6enli1bpjfeeEOpqan64IMPJEn/+te/lJKSoiNHjug///mPJMnT07PIbS5dulTdunVTzZo1NXr0aGVkZOijjz5SmzZttGnTJqNzcUGvXr0UGRmpmJgYbdq0SV999ZUCAgL03nvvXVNs77vvPj355JP6/vvv9cgjj0jKzx5ERUXp5ptvvqz8vn379MMPP+iBBx5QZGSkEhIS9Pnnn6t9+/bauXOnQkJCVK9ePb355pt644039Pjjj6tdu3aSZHW8k5OT1a1bN/Xp00cPPfSQAgMDC63fhAkTtGzZMg0YMEBxcXFydnbW559/rl9++UVTp05VSEjIVfcxMzNTSUlJly1PS0u7bNmOHTvUpk0bhYaG6pVXXpGHh4dmzZqle+65R3PmzNG9995r0zicOnVKPXr0UJ8+ffTAAw/o008/VZ8+fTRt2jQNGzZMTz75pPr27asPPvhA999/vw4fPqwqVapIyu/IrVmzRn369FFYWJgOHDigTz/9VB06dNDOnTtVuXJlq3175pln5OPjo9GjR2vPnj369NNPdfDgQaMDDQAVigVAmZGSkmKRZLn77ruvqfyWLVsskiyPPvqo1fIXXnjBIsmy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",
      "text/plain": [
       "<Figure size 1000x800 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import seaborn as sns\n",
    "import matplotlib.pyplot as plt\n",
    "k = 1\n",
    "nlhs = 50000\n",
    "filename = \"data/lhs_\"+str(k)+\"_size\"+str(nlhs)+\".csv\"\n",
    "dataframe = pandas.read_csv(filename, header=None)\n",
    "\n",
    "dataframe.head()\n",
    "\n",
    "corr_matrix = dataframe.corr()\n",
    "\n",
    "# 设置绘图尺寸\n",
    "plt.figure(figsize=(10, 8))\n",
    "\n",
    "# 使用seaborn绘制热力图\n",
    "sns.heatmap(corr_matrix, annot=True, fmt=\".2f\", cmap='coolwarm', cbar=True)\n",
    "\n",
    "# 添加图形标题\n",
    "plt.title('Correlation Matrix Heatmap')\n",
    "\n",
    "# 显示图形\n",
    "plt.show()\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "2b4db6ae",
   "metadata": {},
   "source": [
    "### define the NN model"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "4162c8dd",
   "metadata": {},
   "outputs": [],
   "source": [
    "from tensorflow.keras.models import Sequential\n",
    "from tensorflow.keras.layers import Dense\n",
    "def baseline_model(learning_rate=0.001):  # Add learning_rate parameter\n",
    "    model = Sequential([\n",
    "        Dense(20, activation='relu', input_shape=(6,), use_bias=False, name=\"layer1\"),  # Hidden layer with 50 neurons\n",
    "        Dense(7, activation='softmax', use_bias=False, name=\"layer3\")  # Output layer with 7 classes\n",
    "    ])\n",
    "    # Compile model with specified learning rate\n",
    "    optimizer = tf.keras.optimizers.Adam(learning_rate=learning_rate)  # Specify learning rate here\n",
    "    model.compile(loss='categorical_crossentropy', optimizer=optimizer, metrics=['accuracy'])\n",
    "    return model"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "86a6269a",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Counter({5.0: 8477, 2.0: 8385, 3.0: 8304, 1.0: 8303, 6.0: 8299, 4.0: 8172, 7.0: 60})\n",
      "Counter({6.0: 8477, 4.0: 8477, 1.0: 8477, 5.0: 8477, 2.0: 8477, 3.0: 8477, 7.0: 8477})\n",
      "(59339, 6)\n",
      "(59339, 7)\n"
     ]
    }
   ],
   "source": [
    "k = 5\n",
    "nlhs = 50000\n",
    "X, dummy_y = getdata(k,nlhs)\n",
    "\n",
    "print(X.shape)\n",
    "print(dummy_y.shape)\n",
    "\n",
    "\n",
    "\n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "86220892",
   "metadata": {},
   "source": [
    "### For loop to store the training results regarding different k & nls"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "79a84781",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Counter({5.0: 8355, 3.0: 8347, 6.0: 8340, 1.0: 8311, 4.0: 8308, 2.0: 8301, 7.0: 38})\n",
      "Counter({6.0: 8355, 2.0: 8355, 3.0: 8355, 1.0: 8355, 5.0: 8355, 4.0: 8355, 7.0: 8355})\n",
      "train-score: 0.14\n",
      "test-score: 0.14\n",
      "train-score: 0.86\n",
      "test-score: 0.85\n",
      "train-score: 0.86\n",
      "test-score: 0.86\n",
      "train-score: 0.86\n",
      "test-score: 0.85\n",
      "train-score: 0.11\n",
      "test-score: 0.11\n",
      "Weights saved to: savemodel/lhs_1_size50000_noembed.h5\n",
      "Full model saved to: savemodel/lhs_1_size50000_noembed_full.h5\n",
      "Counter({6.0: 8427, 3.0: 8411, 5.0: 8372, 2.0: 8332, 1.0: 8246, 4.0: 8156, 7.0: 56})\n",
      "Counter({1.0: 8427, 3.0: 8427, 4.0: 8427, 2.0: 8427, 5.0: 8427, 6.0: 8427, 7.0: 8427})\n",
      "train-score: 0.86\n",
      "test-score: 0.85\n",
      "train-score: 0.12\n",
      "test-score: 0.12\n",
      "train-score: 0.11\n",
      "test-score: 0.11\n",
      "train-score: 0.86\n",
      "test-score: 0.85\n",
      "train-score: 0.14\n",
      "test-score: 0.14\n",
      "Weights saved to: savemodel/lhs_2_size50000_noembed.h5\n",
      "Full model saved to: savemodel/lhs_2_size50000_noembed_full.h5\n",
      "Counter({3.0: 8429, 5.0: 8351, 6.0: 8338, 2.0: 8314, 4.0: 8292, 1.0: 8234, 7.0: 42})\n",
      "Counter({4.0: 8429, 5.0: 8429, 3.0: 8429, 2.0: 8429, 1.0: 8429, 6.0: 8429, 7.0: 8429})\n",
      "train-score: 0.11\n",
      "test-score: 0.10\n",
      "train-score: 0.85\n",
      "test-score: 0.86\n",
      "train-score: 0.86\n",
      "test-score: 0.85\n",
      "train-score: 0.16\n",
      "test-score: 0.16\n",
      "train-score: 0.86\n",
      "test-score: 0.85\n",
      "Weights saved to: savemodel/lhs_3_size50000_noembed.h5\n",
      "Full model saved to: savemodel/lhs_3_size50000_noembed_full.h5\n",
      "Counter({5.0: 8426, 3.0: 8407, 6.0: 8393, 1.0: 8254, 2.0: 8248, 4.0: 8212, 7.0: 60})\n",
      "Counter({1.0: 8426, 4.0: 8426, 5.0: 8426, 3.0: 8426, 2.0: 8426, 6.0: 8426, 7.0: 8426})\n",
      "train-score: 0.86\n",
      "test-score: 0.85\n",
      "train-score: 0.85\n",
      "test-score: 0.86\n",
      "train-score: 0.14\n",
      "test-score: 0.14\n",
      "train-score: 0.19\n",
      "test-score: 0.19\n",
      "train-score: 0.15\n",
      "test-score: 0.15\n",
      "Weights saved to: savemodel/lhs_4_size50000_noembed.h5\n",
      "Full model saved to: savemodel/lhs_4_size50000_noembed_full.h5\n",
      "Counter({5.0: 8439, 3.0: 8384, 2.0: 8339, 4.0: 8301, 6.0: 8242, 1.0: 8228, 7.0: 67})\n",
      "Counter({3.0: 8439, 1.0: 8439, 6.0: 8439, 5.0: 8439, 2.0: 8439, 4.0: 8439, 7.0: 8439})\n",
      "train-score: 0.86\n",
      "test-score: 0.85\n",
      "train-score: 0.15\n",
      "test-score: 0.14\n",
      "train-score: 0.85\n",
      "test-score: 0.86\n",
      "train-score: 0.09\n",
      "test-score: 0.09\n",
      "train-score: 0.21\n",
      "test-score: 0.22\n",
      "Weights saved to: savemodel/lhs_5_size50000_noembed.h5\n",
      "Full model saved to: savemodel/lhs_5_size50000_noembed_full.h5\n",
      "Counter({6.0: 8447, 3.0: 8371, 5.0: 8345, 1.0: 8274, 2.0: 8263, 4.0: 8239, 7.0: 61})\n",
      "Counter({6.0: 8447, 5.0: 8447, 4.0: 8447, 1.0: 8447, 2.0: 8447, 3.0: 8447, 7.0: 8447})\n",
      "train-score: 0.13\n",
      "test-score: 0.13\n",
      "train-score: 0.17\n",
      "test-score: 0.17\n",
      "train-score: 0.86\n",
      "test-score: 0.85\n",
      "train-score: 0.16\n",
      "test-score: 0.16\n",
      "train-score: 0.85\n",
      "test-score: 0.86\n",
      "Weights saved to: savemodel/lhs_6_size50000_noembed.h5\n",
      "Full model saved to: savemodel/lhs_6_size50000_noembed_full.h5\n",
      "Counter({6.0: 8392, 3.0: 8391, 5.0: 8384, 2.0: 8344, 4.0: 8230, 1.0: 8200, 7.0: 59})\n",
      "Counter({3.0: 8392, 5.0: 8392, 2.0: 8392, 4.0: 8392, 6.0: 8392, 1.0: 8392, 7.0: 8392})\n",
      "train-score: 0.17\n",
      "test-score: 0.17\n",
      "train-score: 0.86\n",
      "test-score: 0.85\n",
      "train-score: 0.86\n",
      "test-score: 0.85\n",
      "train-score: 0.86\n",
      "test-score: 0.86\n",
      "train-score: 0.22\n",
      "test-score: 0.22\n",
      "Weights saved to: savemodel/lhs_7_size50000_noembed.h5\n",
      "Full model saved to: savemodel/lhs_7_size50000_noembed_full.h5\n",
      "Counter({3.0: 8432, 2.0: 8418, 5.0: 8391, 6.0: 8354, 1.0: 8212, 4.0: 8140, 7.0: 53})\n",
      "Counter({5.0: 8432, 1.0: 8432, 4.0: 8432, 3.0: 8432, 2.0: 8432, 6.0: 8432, 7.0: 8432})\n",
      "train-score: 0.86\n",
      "test-score: 0.86\n",
      "train-score: 0.24\n",
      "test-score: 0.24\n",
      "train-score: 0.13\n",
      "test-score: 0.14\n",
      "train-score: 0.86\n",
      "test-score: 0.86\n",
      "train-score: 0.16\n",
      "test-score: 0.15\n",
      "Weights saved to: savemodel/lhs_8_size50000_noembed.h5\n",
      "Full model saved to: savemodel/lhs_8_size50000_noembed_full.h5\n",
      "Counter({6.0: 8468, 5.0: 8414, 3.0: 8403, 2.0: 8375, 4.0: 8165, 1.0: 8122, 7.0: 53})\n",
      "Counter({4.0: 8468, 1.0: 8468, 6.0: 8468, 2.0: 8468, 5.0: 8468, 3.0: 8468, 7.0: 8468})\n",
      "train-score: 0.86\n",
      "test-score: 0.86\n",
      "train-score: 0.86\n",
      "test-score: 0.85\n",
      "train-score: 0.10\n",
      "test-score: 0.10\n",
      "train-score: 0.11\n",
      "test-score: 0.11\n",
      "train-score: 0.19\n",
      "test-score: 0.19\n",
      "Weights saved to: savemodel/lhs_9_size50000_noembed.h5\n",
      "Full model saved to: savemodel/lhs_9_size50000_noembed_full.h5\n",
      "Counter({3.0: 8427, 6.0: 8387, 5.0: 8349, 2.0: 8295, 1.0: 8274, 4.0: 8204, 7.0: 64})\n",
      "Counter({2.0: 8427, 6.0: 8427, 5.0: 8427, 1.0: 8427, 3.0: 8427, 4.0: 8427, 7.0: 8427})\n",
      "train-score: 0.13\n",
      "test-score: 0.13\n",
      "train-score: 0.15\n",
      "test-score: 0.15\n",
      "train-score: 0.12\n",
      "test-score: 0.12\n",
      "train-score: 0.85\n",
      "test-score: 0.85\n",
      "train-score: 0.13\n",
      "test-score: 0.14\n",
      "Weights saved to: savemodel/lhs_10_size50000_noembed.h5\n",
      "Full model saved to: savemodel/lhs_10_size50000_noembed_full.h5\n"
     ]
    }
   ],
   "source": [
    "estimator_lst = []\n",
    "from tensorflow.keras.callbacks import EarlyStopping\n",
    "for nlhs in nlhs_grid:\n",
    "    for k in k_grid:\n",
    "        X, dummy_y = getdata(k,nlhs)\n",
    "        epochs = 1000  # Increase max epochs\n",
    "        early_stopping = EarlyStopping(\n",
    "            monitor='val_loss',\n",
    "            patience=200,\n",
    "            restore_best_weights=True\n",
    "        )\n",
    "        \n",
    "        estimator_lst.append(KerasClassifier(\n",
    "            model=baseline_model, \n",
    "            epochs=epochs, \n",
    "            batch_size=10000, \n",
    "            verbose=0,\n",
    "            callbacks=[early_stopping],\n",
    "            validation_split=0.2  # Use 20% of training data for validation\n",
    "        ))\n",
    "        kfold = KFold(n_splits=5, shuffle=True)\n",
    "        best_score = -float('inf')\n",
    "        best_model = None\n",
    "        for train_index, test_index in kfold.split(X):\n",
    "            X_train, X_test = X[train_index], X[test_index]\n",
    "            y_train, y_test = dummy_y[train_index], dummy_y[test_index]\n",
    "            \n",
    "            X_train = tf.convert_to_tensor(X_train)\n",
    "            y_train = tf.convert_to_tensor(y_train)\n",
    "            X_test = tf.convert_to_tensor(X_test)\n",
    "            y_test = tf.convert_to_tensor(y_test)    \n",
    "            \n",
    "            estimator_lst[-1].fit(X_train, y_train)\n",
    "            train_score = estimator_lst[-1].score(X_train, y_train)\n",
    "            test_score = estimator_lst[-1].score(X_test, y_test)\n",
    "            print(\"train-score: %.2f\" % (estimator_lst[-1].score(X_train, y_train)))\n",
    "            print(\"test-score: %.2f\" % (estimator_lst[-1].score(X_test, y_test))) \n",
    "\n",
    "                    # Update best model if current test score is better\n",
    "            if test_score > best_score:\n",
    "                best_score = test_score\n",
    "            best_model = estimator_lst[-1]\n",
    "        savemodel(best_model,k,nlhs)  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "825304b4",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(47192, 6)\n",
      "(47192, 7)\n"
     ]
    }
   ],
   "source": [
    "print(X_train.shape)\n",
    "print(y_train.shape)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "tf2",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.9.15"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
